#!/usr/bin/env node

const zlib = require('zlib');
const fs = require('fs');
const assert = require('assert');//断言
const src = process.argv[2];

// console.log(src);
// 检查是否有命令行参数
if (src === undefined) {
  console.error('错误：未提供要压缩的文件名。');
  process.exit(1);
}

// 检查文件是否存在
if (!fs.existsSync(src)) {
  console.error(`错误：文件 ${src} 不存在。`);
  process.exit(1);
}
assert.notEqual(src, undefined, 'file name can not be null');

const dst = src.slice(0,sr.length - 3);
// 流式压缩
// 流的方式
fs.createReadStream(src)
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream(dst))
  .on('finish', () => {
    console.log(`文件 ${src} 已解压缩为 ${dst}`);
  })
  .on('error', (error) => {
    console.error(`解压缩时出错：${error}`);
  });
// buffer方式压缩
// Buffer 方式
// 读取压缩文件内容
fs.readFile(src, (err, buf) => {
  assert.ifError(err);
  zlib.gunzip(buf, (err, buffer) => {
    assert.ifError(err);
    fs.writeFileSync(dst, buffer);
    console.log(`文件 ${src} 已解压缩为 ${dst}`);
  });
});